package org.monster.context.core.communicator;

import org.monster.context.core.headerfilter.BaseFilterChain;
import org.monster.context.core.headerfilter.HeaderFilterChain;
import org.monster.context.core.headerfilter.HeaderMethodFilter;
import org.monster.context.core.headerfilter.HeaderURIFilter;
import org.monster.context.core.parameter.HttpResponse;
import org.monster.context.core.request.HttpRequest;

/**
 * 头
 *
 * @author Monster
 */
public abstract class Header {

    /**
     * 名称
     */
    private String name;
    /**
     * 值
     */
    private String value;

    /**
     * @param name  名称
     * @param value 值
     */
    public Header(String name, String value) {
        this.name = name;
        this.value = value;
    }

    /**
     * 构造方法
     */
    public Header() {
        super();
    }

    /**
     * 获取 名称
     *
     * @return 名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置 名称
     *
     * @param name 名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取 值
     *
     * @return 值
     */
    public String getValue() {
        return value;
    }

    /**
     * 设置 值
     *
     * @param value 值
     */
    public void setValue(String value) {
        this.value = value;
    }

    /**
     * 处理 基本头
     *
     * @param request  请求
     * @param response 响应
     * @param chain    通道
     */
    public void processBaseHeader(HttpRequest request,
                                  HttpResponse response, BaseFilterChain chain) {
        chain.addBaseFilter(new HeaderURIFilter());
        chain.addBaseFilter(new HeaderMethodFilter());
        chain.doBaseHeaders(request, response, chain);
    }

    /**
     * 做 头过滤
     *
     * @param request  请求
     * @param response 响应
     * @param chain    通道
     */
    public abstract void doHeaderFilter(HttpRequest request,
                                        HttpResponse response, HeaderFilterChain chain);

}
